/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

// THIS FILE IS GENERATED BY ZAP
package chip.devicecontroller;

import androidx.annotation.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Optional;

public class ChipEventStructs {
  public static class AccessControlClusterAccessControlEntryChangedEvent {
    public @Nullable Long adminNodeID;
    public @Nullable Integer adminPasscodeID;
    public Integer changeType;
    public @Nullable ChipStructs.AccessControlClusterAccessControlEntry latestValue;
    public Integer adminFabricIndex;

    public AccessControlClusterAccessControlEntryChangedEvent(
        @Nullable Long adminNodeID,
        @Nullable Integer adminPasscodeID,
        Integer changeType,
        @Nullable ChipStructs.AccessControlClusterAccessControlEntry latestValue,
        Integer adminFabricIndex) {
      this.adminNodeID = adminNodeID;
      this.adminPasscodeID = adminPasscodeID;
      this.changeType = changeType;
      this.latestValue = latestValue;
      this.adminFabricIndex = adminFabricIndex;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("AccessControlClusterAccessControlEntryChangedEvent {\n");
      output.append("\tadminNodeID: ");
      output.append(adminNodeID);
      output.append("\n");
      output.append("\tadminPasscodeID: ");
      output.append(adminPasscodeID);
      output.append("\n");
      output.append("\tchangeType: ");
      output.append(changeType);
      output.append("\n");
      output.append("\tlatestValue: ");
      output.append(latestValue);
      output.append("\n");
      output.append("\tadminFabricIndex: ");
      output.append(adminFabricIndex);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class AccessControlClusterAccessControlExtensionChangedEvent {
    public @Nullable Long adminNodeID;
    public @Nullable Integer adminPasscodeID;
    public Integer changeType;
    public @Nullable ChipStructs.AccessControlClusterExtensionEntry latestValue;
    public Integer adminFabricIndex;

    public AccessControlClusterAccessControlExtensionChangedEvent(
        @Nullable Long adminNodeID,
        @Nullable Integer adminPasscodeID,
        Integer changeType,
        @Nullable ChipStructs.AccessControlClusterExtensionEntry latestValue,
        Integer adminFabricIndex) {
      this.adminNodeID = adminNodeID;
      this.adminPasscodeID = adminPasscodeID;
      this.changeType = changeType;
      this.latestValue = latestValue;
      this.adminFabricIndex = adminFabricIndex;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("AccessControlClusterAccessControlExtensionChangedEvent {\n");
      output.append("\tadminNodeID: ");
      output.append(adminNodeID);
      output.append("\n");
      output.append("\tadminPasscodeID: ");
      output.append(adminPasscodeID);
      output.append("\n");
      output.append("\tchangeType: ");
      output.append(changeType);
      output.append("\n");
      output.append("\tlatestValue: ");
      output.append(latestValue);
      output.append("\n");
      output.append("\tadminFabricIndex: ");
      output.append(adminFabricIndex);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class BridgedActionsClusterStateChangedEvent {
    public Integer actionID;
    public Long invokeID;
    public Integer newState;

    public BridgedActionsClusterStateChangedEvent(
        Integer actionID, Long invokeID, Integer newState) {
      this.actionID = actionID;
      this.invokeID = invokeID;
      this.newState = newState;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("BridgedActionsClusterStateChangedEvent {\n");
      output.append("\tactionID: ");
      output.append(actionID);
      output.append("\n");
      output.append("\tinvokeID: ");
      output.append(invokeID);
      output.append("\n");
      output.append("\tnewState: ");
      output.append(newState);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class BridgedActionsClusterActionFailedEvent {
    public Integer actionID;
    public Long invokeID;
    public Integer newState;
    public Integer error;

    public BridgedActionsClusterActionFailedEvent(
        Integer actionID, Long invokeID, Integer newState, Integer error) {
      this.actionID = actionID;
      this.invokeID = invokeID;
      this.newState = newState;
      this.error = error;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("BridgedActionsClusterActionFailedEvent {\n");
      output.append("\tactionID: ");
      output.append(actionID);
      output.append("\n");
      output.append("\tinvokeID: ");
      output.append(invokeID);
      output.append("\n");
      output.append("\tnewState: ");
      output.append(newState);
      output.append("\n");
      output.append("\terror: ");
      output.append(error);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class BasicClusterStartUpEvent {
    public Long softwareVersion;

    public BasicClusterStartUpEvent(Long softwareVersion) {
      this.softwareVersion = softwareVersion;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("BasicClusterStartUpEvent {\n");
      output.append("\tsoftwareVersion: ");
      output.append(softwareVersion);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class BasicClusterShutDownEvent {

    public BasicClusterShutDownEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("BasicClusterShutDownEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class BasicClusterLeaveEvent {

    public BasicClusterLeaveEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("BasicClusterLeaveEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class BasicClusterReachableChangedEvent {
    public Boolean reachableNewValue;

    public BasicClusterReachableChangedEvent(Boolean reachableNewValue) {
      this.reachableNewValue = reachableNewValue;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("BasicClusterReachableChangedEvent {\n");
      output.append("\treachableNewValue: ");
      output.append(reachableNewValue);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class OtaSoftwareUpdateRequestorClusterStateTransitionEvent {
    public Integer previousState;
    public Integer newState;
    public Integer reason;
    public @Nullable Long targetSoftwareVersion;

    public OtaSoftwareUpdateRequestorClusterStateTransitionEvent(
        Integer previousState,
        Integer newState,
        Integer reason,
        @Nullable Long targetSoftwareVersion) {
      this.previousState = previousState;
      this.newState = newState;
      this.reason = reason;
      this.targetSoftwareVersion = targetSoftwareVersion;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("OtaSoftwareUpdateRequestorClusterStateTransitionEvent {\n");
      output.append("\tpreviousState: ");
      output.append(previousState);
      output.append("\n");
      output.append("\tnewState: ");
      output.append(newState);
      output.append("\n");
      output.append("\treason: ");
      output.append(reason);
      output.append("\n");
      output.append("\ttargetSoftwareVersion: ");
      output.append(targetSoftwareVersion);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class OtaSoftwareUpdateRequestorClusterVersionAppliedEvent {
    public Long softwareVersion;
    public Integer productID;

    public OtaSoftwareUpdateRequestorClusterVersionAppliedEvent(
        Long softwareVersion, Integer productID) {
      this.softwareVersion = softwareVersion;
      this.productID = productID;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("OtaSoftwareUpdateRequestorClusterVersionAppliedEvent {\n");
      output.append("\tsoftwareVersion: ");
      output.append(softwareVersion);
      output.append("\n");
      output.append("\tproductID: ");
      output.append(productID);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class OtaSoftwareUpdateRequestorClusterDownloadErrorEvent {
    public Long softwareVersion;
    public Long bytesDownloaded;
    public @Nullable Integer progressPercent;
    public @Nullable Long platformCode;

    public OtaSoftwareUpdateRequestorClusterDownloadErrorEvent(
        Long softwareVersion,
        Long bytesDownloaded,
        @Nullable Integer progressPercent,
        @Nullable Long platformCode) {
      this.softwareVersion = softwareVersion;
      this.bytesDownloaded = bytesDownloaded;
      this.progressPercent = progressPercent;
      this.platformCode = platformCode;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("OtaSoftwareUpdateRequestorClusterDownloadErrorEvent {\n");
      output.append("\tsoftwareVersion: ");
      output.append(softwareVersion);
      output.append("\n");
      output.append("\tbytesDownloaded: ");
      output.append(bytesDownloaded);
      output.append("\n");
      output.append("\tprogressPercent: ");
      output.append(progressPercent);
      output.append("\n");
      output.append("\tplatformCode: ");
      output.append(platformCode);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class GeneralDiagnosticsClusterHardwareFaultChangeEvent {
    public ArrayList<Object> current;
    public ArrayList<Object> previous;

    public GeneralDiagnosticsClusterHardwareFaultChangeEvent(
        ArrayList<Object> current, ArrayList<Object> previous) {
      this.current = current;
      this.previous = previous;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("GeneralDiagnosticsClusterHardwareFaultChangeEvent {\n");
      output.append("\tcurrent: ");
      output.append(current);
      output.append("\n");
      output.append("\tprevious: ");
      output.append(previous);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class GeneralDiagnosticsClusterRadioFaultChangeEvent {
    public ArrayList<Object> current;
    public ArrayList<Object> previous;

    public GeneralDiagnosticsClusterRadioFaultChangeEvent(
        ArrayList<Object> current, ArrayList<Object> previous) {
      this.current = current;
      this.previous = previous;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("GeneralDiagnosticsClusterRadioFaultChangeEvent {\n");
      output.append("\tcurrent: ");
      output.append(current);
      output.append("\n");
      output.append("\tprevious: ");
      output.append(previous);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class GeneralDiagnosticsClusterNetworkFaultChangeEvent {
    public ArrayList<Object> current;
    public ArrayList<Object> previous;

    public GeneralDiagnosticsClusterNetworkFaultChangeEvent(
        ArrayList<Object> current, ArrayList<Object> previous) {
      this.current = current;
      this.previous = previous;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("GeneralDiagnosticsClusterNetworkFaultChangeEvent {\n");
      output.append("\tcurrent: ");
      output.append(current);
      output.append("\n");
      output.append("\tprevious: ");
      output.append(previous);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class GeneralDiagnosticsClusterBootReasonEvent {
    public Integer bootReason;

    public GeneralDiagnosticsClusterBootReasonEvent(Integer bootReason) {
      this.bootReason = bootReason;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("GeneralDiagnosticsClusterBootReasonEvent {\n");
      output.append("\tbootReason: ");
      output.append(bootReason);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class SoftwareDiagnosticsClusterSoftwareFaultEvent {
    public Long id;
    public Optional<String> name;
    public Optional<byte[]> faultRecording;

    public SoftwareDiagnosticsClusterSoftwareFaultEvent(
        Long id, Optional<String> name, Optional<byte[]> faultRecording) {
      this.id = id;
      this.name = name;
      this.faultRecording = faultRecording;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("SoftwareDiagnosticsClusterSoftwareFaultEvent {\n");
      output.append("\tid: ");
      output.append(id);
      output.append("\n");
      output.append("\tname: ");
      output.append(name);
      output.append("\n");
      output.append("\tfaultRecording: ");
      output.append(faultRecording.isPresent() ? Arrays.toString(faultRecording.get()) : "");
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class ThreadNetworkDiagnosticsClusterConnectionStatusEvent {
    public Integer connectionStatus;

    public ThreadNetworkDiagnosticsClusterConnectionStatusEvent(Integer connectionStatus) {
      this.connectionStatus = connectionStatus;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("ThreadNetworkDiagnosticsClusterConnectionStatusEvent {\n");
      output.append("\tconnectionStatus: ");
      output.append(connectionStatus);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class WiFiNetworkDiagnosticsClusterDisconnectionEvent {
    public Integer reasonCode;

    public WiFiNetworkDiagnosticsClusterDisconnectionEvent(Integer reasonCode) {
      this.reasonCode = reasonCode;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("WiFiNetworkDiagnosticsClusterDisconnectionEvent {\n");
      output.append("\treasonCode: ");
      output.append(reasonCode);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class WiFiNetworkDiagnosticsClusterAssociationFailureEvent {
    public Integer associationFailure;
    public Integer status;

    public WiFiNetworkDiagnosticsClusterAssociationFailureEvent(
        Integer associationFailure, Integer status) {
      this.associationFailure = associationFailure;
      this.status = status;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("WiFiNetworkDiagnosticsClusterAssociationFailureEvent {\n");
      output.append("\tassociationFailure: ");
      output.append(associationFailure);
      output.append("\n");
      output.append("\tstatus: ");
      output.append(status);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class WiFiNetworkDiagnosticsClusterConnectionStatusEvent {
    public Integer connectionStatus;

    public WiFiNetworkDiagnosticsClusterConnectionStatusEvent(Integer connectionStatus) {
      this.connectionStatus = connectionStatus;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("WiFiNetworkDiagnosticsClusterConnectionStatusEvent {\n");
      output.append("\tconnectionStatus: ");
      output.append(connectionStatus);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class BridgedDeviceBasicClusterStartUpEvent {
    public Long softwareVersion;

    public BridgedDeviceBasicClusterStartUpEvent(Long softwareVersion) {
      this.softwareVersion = softwareVersion;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("BridgedDeviceBasicClusterStartUpEvent {\n");
      output.append("\tsoftwareVersion: ");
      output.append(softwareVersion);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class BridgedDeviceBasicClusterShutDownEvent {

    public BridgedDeviceBasicClusterShutDownEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("BridgedDeviceBasicClusterShutDownEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class BridgedDeviceBasicClusterLeaveEvent {

    public BridgedDeviceBasicClusterLeaveEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("BridgedDeviceBasicClusterLeaveEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class BridgedDeviceBasicClusterReachableChangedEvent {
    public Boolean reachableNewValue;

    public BridgedDeviceBasicClusterReachableChangedEvent(Boolean reachableNewValue) {
      this.reachableNewValue = reachableNewValue;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("BridgedDeviceBasicClusterReachableChangedEvent {\n");
      output.append("\treachableNewValue: ");
      output.append(reachableNewValue);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class SwitchClusterSwitchLatchedEvent {
    public Integer newPosition;

    public SwitchClusterSwitchLatchedEvent(Integer newPosition) {
      this.newPosition = newPosition;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("SwitchClusterSwitchLatchedEvent {\n");
      output.append("\tnewPosition: ");
      output.append(newPosition);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class SwitchClusterInitialPressEvent {
    public Integer newPosition;

    public SwitchClusterInitialPressEvent(Integer newPosition) {
      this.newPosition = newPosition;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("SwitchClusterInitialPressEvent {\n");
      output.append("\tnewPosition: ");
      output.append(newPosition);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class SwitchClusterLongPressEvent {
    public Integer newPosition;

    public SwitchClusterLongPressEvent(Integer newPosition) {
      this.newPosition = newPosition;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("SwitchClusterLongPressEvent {\n");
      output.append("\tnewPosition: ");
      output.append(newPosition);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class SwitchClusterShortReleaseEvent {
    public Integer previousPosition;

    public SwitchClusterShortReleaseEvent(Integer previousPosition) {
      this.previousPosition = previousPosition;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("SwitchClusterShortReleaseEvent {\n");
      output.append("\tpreviousPosition: ");
      output.append(previousPosition);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class SwitchClusterLongReleaseEvent {
    public Integer previousPosition;

    public SwitchClusterLongReleaseEvent(Integer previousPosition) {
      this.previousPosition = previousPosition;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("SwitchClusterLongReleaseEvent {\n");
      output.append("\tpreviousPosition: ");
      output.append(previousPosition);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class SwitchClusterMultiPressOngoingEvent {
    public Integer newPosition;
    public Integer currentNumberOfPressesCounted;

    public SwitchClusterMultiPressOngoingEvent(
        Integer newPosition, Integer currentNumberOfPressesCounted) {
      this.newPosition = newPosition;
      this.currentNumberOfPressesCounted = currentNumberOfPressesCounted;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("SwitchClusterMultiPressOngoingEvent {\n");
      output.append("\tnewPosition: ");
      output.append(newPosition);
      output.append("\n");
      output.append("\tcurrentNumberOfPressesCounted: ");
      output.append(currentNumberOfPressesCounted);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class SwitchClusterMultiPressCompleteEvent {
    public Integer newPosition;
    public Integer totalNumberOfPressesCounted;

    public SwitchClusterMultiPressCompleteEvent(
        Integer newPosition, Integer totalNumberOfPressesCounted) {
      this.newPosition = newPosition;
      this.totalNumberOfPressesCounted = totalNumberOfPressesCounted;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("SwitchClusterMultiPressCompleteEvent {\n");
      output.append("\tnewPosition: ");
      output.append(newPosition);
      output.append("\n");
      output.append("\ttotalNumberOfPressesCounted: ");
      output.append(totalNumberOfPressesCounted);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class BooleanStateClusterStateChangeEvent {
    public Boolean stateValue;

    public BooleanStateClusterStateChangeEvent(Boolean stateValue) {
      this.stateValue = stateValue;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("BooleanStateClusterStateChangeEvent {\n");
      output.append("\tstateValue: ");
      output.append(stateValue);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class DoorLockClusterDoorLockAlarmEvent {
    public Integer alarmCode;

    public DoorLockClusterDoorLockAlarmEvent(Integer alarmCode) {
      this.alarmCode = alarmCode;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("DoorLockClusterDoorLockAlarmEvent {\n");
      output.append("\talarmCode: ");
      output.append(alarmCode);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class DoorLockClusterDoorStateChangeEvent {
    public Integer doorState;

    public DoorLockClusterDoorStateChangeEvent(Integer doorState) {
      this.doorState = doorState;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("DoorLockClusterDoorStateChangeEvent {\n");
      output.append("\tdoorState: ");
      output.append(doorState);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class DoorLockClusterLockOperationEvent {
    public Integer lockOperationType;
    public Integer operationSource;
    public @Nullable Integer userIndex;
    public @Nullable Integer fabricIndex;
    public @Nullable Long sourceNode;
    public @Nullable Optional<ArrayList<ChipStructs.DoorLockClusterDlCredential>> credentials;

    public DoorLockClusterLockOperationEvent(
        Integer lockOperationType,
        Integer operationSource,
        @Nullable Integer userIndex,
        @Nullable Integer fabricIndex,
        @Nullable Long sourceNode,
        @Nullable Optional<ArrayList<ChipStructs.DoorLockClusterDlCredential>> credentials) {
      this.lockOperationType = lockOperationType;
      this.operationSource = operationSource;
      this.userIndex = userIndex;
      this.fabricIndex = fabricIndex;
      this.sourceNode = sourceNode;
      this.credentials = credentials;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("DoorLockClusterLockOperationEvent {\n");
      output.append("\tlockOperationType: ");
      output.append(lockOperationType);
      output.append("\n");
      output.append("\toperationSource: ");
      output.append(operationSource);
      output.append("\n");
      output.append("\tuserIndex: ");
      output.append(userIndex);
      output.append("\n");
      output.append("\tfabricIndex: ");
      output.append(fabricIndex);
      output.append("\n");
      output.append("\tsourceNode: ");
      output.append(sourceNode);
      output.append("\n");
      output.append("\tcredentials: ");
      output.append(credentials);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class DoorLockClusterLockOperationErrorEvent {
    public Integer lockOperationType;
    public Integer operationSource;
    public Integer operationError;
    public @Nullable Integer userIndex;
    public @Nullable Integer fabricIndex;
    public @Nullable Long sourceNode;
    public @Nullable Optional<ArrayList<ChipStructs.DoorLockClusterDlCredential>> credentials;

    public DoorLockClusterLockOperationErrorEvent(
        Integer lockOperationType,
        Integer operationSource,
        Integer operationError,
        @Nullable Integer userIndex,
        @Nullable Integer fabricIndex,
        @Nullable Long sourceNode,
        @Nullable Optional<ArrayList<ChipStructs.DoorLockClusterDlCredential>> credentials) {
      this.lockOperationType = lockOperationType;
      this.operationSource = operationSource;
      this.operationError = operationError;
      this.userIndex = userIndex;
      this.fabricIndex = fabricIndex;
      this.sourceNode = sourceNode;
      this.credentials = credentials;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("DoorLockClusterLockOperationErrorEvent {\n");
      output.append("\tlockOperationType: ");
      output.append(lockOperationType);
      output.append("\n");
      output.append("\toperationSource: ");
      output.append(operationSource);
      output.append("\n");
      output.append("\toperationError: ");
      output.append(operationError);
      output.append("\n");
      output.append("\tuserIndex: ");
      output.append(userIndex);
      output.append("\n");
      output.append("\tfabricIndex: ");
      output.append(fabricIndex);
      output.append("\n");
      output.append("\tsourceNode: ");
      output.append(sourceNode);
      output.append("\n");
      output.append("\tcredentials: ");
      output.append(credentials);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class DoorLockClusterLockUserChangeEvent {
    public Integer lockDataType;
    public Integer dataOperationType;
    public Integer operationSource;
    public @Nullable Integer userIndex;
    public @Nullable Integer fabricIndex;
    public @Nullable Long sourceNode;
    public @Nullable Integer dataIndex;

    public DoorLockClusterLockUserChangeEvent(
        Integer lockDataType,
        Integer dataOperationType,
        Integer operationSource,
        @Nullable Integer userIndex,
        @Nullable Integer fabricIndex,
        @Nullable Long sourceNode,
        @Nullable Integer dataIndex) {
      this.lockDataType = lockDataType;
      this.dataOperationType = dataOperationType;
      this.operationSource = operationSource;
      this.userIndex = userIndex;
      this.fabricIndex = fabricIndex;
      this.sourceNode = sourceNode;
      this.dataIndex = dataIndex;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("DoorLockClusterLockUserChangeEvent {\n");
      output.append("\tlockDataType: ");
      output.append(lockDataType);
      output.append("\n");
      output.append("\tdataOperationType: ");
      output.append(dataOperationType);
      output.append("\n");
      output.append("\toperationSource: ");
      output.append(operationSource);
      output.append("\n");
      output.append("\tuserIndex: ");
      output.append(userIndex);
      output.append("\n");
      output.append("\tfabricIndex: ");
      output.append(fabricIndex);
      output.append("\n");
      output.append("\tsourceNode: ");
      output.append(sourceNode);
      output.append("\n");
      output.append("\tdataIndex: ");
      output.append(dataIndex);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterSupplyVoltageLowEvent {

    public PumpConfigurationAndControlClusterSupplyVoltageLowEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterSupplyVoltageLowEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterSupplyVoltageHighEvent {

    public PumpConfigurationAndControlClusterSupplyVoltageHighEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterSupplyVoltageHighEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterPowerMissingPhaseEvent {

    public PumpConfigurationAndControlClusterPowerMissingPhaseEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterPowerMissingPhaseEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterSystemPressureLowEvent {

    public PumpConfigurationAndControlClusterSystemPressureLowEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterSystemPressureLowEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterSystemPressureHighEvent {

    public PumpConfigurationAndControlClusterSystemPressureHighEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterSystemPressureHighEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterDryRunningEvent {

    public PumpConfigurationAndControlClusterDryRunningEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterDryRunningEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterMotorTemperatureHighEvent {

    public PumpConfigurationAndControlClusterMotorTemperatureHighEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterMotorTemperatureHighEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterPumpMotorFatalFailureEvent {

    public PumpConfigurationAndControlClusterPumpMotorFatalFailureEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterPumpMotorFatalFailureEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterElectronicTemperatureHighEvent {

    public PumpConfigurationAndControlClusterElectronicTemperatureHighEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterElectronicTemperatureHighEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterPumpBlockedEvent {

    public PumpConfigurationAndControlClusterPumpBlockedEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterPumpBlockedEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterSensorFailureEvent {

    public PumpConfigurationAndControlClusterSensorFailureEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterSensorFailureEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterElectronicNonFatalFailureEvent {

    public PumpConfigurationAndControlClusterElectronicNonFatalFailureEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterElectronicNonFatalFailureEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterElectronicFatalFailureEvent {

    public PumpConfigurationAndControlClusterElectronicFatalFailureEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterElectronicFatalFailureEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterGeneralFaultEvent {

    public PumpConfigurationAndControlClusterGeneralFaultEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterGeneralFaultEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterLeakageEvent {

    public PumpConfigurationAndControlClusterLeakageEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterLeakageEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterAirDetectionEvent {

    public PumpConfigurationAndControlClusterAirDetectionEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterAirDetectionEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class PumpConfigurationAndControlClusterTurbineOperationEvent {

    public PumpConfigurationAndControlClusterTurbineOperationEvent() {}

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("PumpConfigurationAndControlClusterTurbineOperationEvent {\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class TestClusterClusterTestEventEvent {
    public Integer arg1;
    public Integer arg2;
    public Boolean arg3;
    public ChipStructs.TestClusterClusterSimpleStruct arg4;
    public ArrayList<ChipStructs.TestClusterClusterSimpleStruct> arg5;
    public ArrayList<Object> arg6;

    public TestClusterClusterTestEventEvent(
        Integer arg1,
        Integer arg2,
        Boolean arg3,
        ChipStructs.TestClusterClusterSimpleStruct arg4,
        ArrayList<ChipStructs.TestClusterClusterSimpleStruct> arg5,
        ArrayList<Object> arg6) {
      this.arg1 = arg1;
      this.arg2 = arg2;
      this.arg3 = arg3;
      this.arg4 = arg4;
      this.arg5 = arg5;
      this.arg6 = arg6;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("TestClusterClusterTestEventEvent {\n");
      output.append("\targ1: ");
      output.append(arg1);
      output.append("\n");
      output.append("\targ2: ");
      output.append(arg2);
      output.append("\n");
      output.append("\targ3: ");
      output.append(arg3);
      output.append("\n");
      output.append("\targ4: ");
      output.append(arg4);
      output.append("\n");
      output.append("\targ5: ");
      output.append(arg5);
      output.append("\n");
      output.append("\targ6: ");
      output.append(arg6);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }

  public static class TestClusterClusterTestFabricScopedEventEvent {
    public Integer arg1;

    public TestClusterClusterTestFabricScopedEventEvent(Integer arg1) {
      this.arg1 = arg1;
    }

    @Override
    public String toString() {
      StringBuilder output = new StringBuilder();
      output.append("TestClusterClusterTestFabricScopedEventEvent {\n");
      output.append("\targ1: ");
      output.append(arg1);
      output.append("\n");
      output.append("}\n");
      return output.toString();
    }
  }
}
